package com.zingrow.web.user.mapper;

import com.zingrow.web.user.model.User;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

public interface UserMapper {
	
	/**
	 * 登录验证
	 */
	User checkUserLogin(Map<String, String> map);
	
	/**
	 * 登录验证,根据名字
	 */
	User checkUserName(String account);
	
	/**
	 * 根据用户id删除  改变用户状态
	 * @param userId
	 * @return
	 */
	int deleteByPrimaryKey(Integer userId);
	
	/*
	 * 根据用户名查询用户id
	 * */
	Integer selectByUserAccount(String user);
	/**
	 * 添加用户
	 * 
	 * @param record
	 * @return
	 */
	int insert(User user);
	
	/*
	 * 添加普通管理员用户
	 * */
	int inserts(User record);
	/**
	 * 同名账户查询
	 * 
	 * @param account
	 * @param userId
	 *            为null时仅根据用户名判断。不为null会检测是否存在除此ID外其他同名(修改时检测)
	 * @param userType
	 *            为2时仅根据客户用户名判断。
	 * @return
	 */
	int selectSameByUserName(@Param("account") String account, @Param("userId") Integer userId,
			@Param("userType") Integer userType);
	
	/**
	 * 同用户名查询
	 * 
	 * @param account
	 * @param userId
	 *            为null时仅根据用户名判断。不为null会检测是否存在除此ID外其他同名(修改时检测)
	 * @param userType
	 *            为2时仅根据客户用户名判断。
	 * @return
	 */
	int selectSameByUserNameone(@Param("name") String name, @Param("userId") Integer userId,
			@Param("userType") Integer userType);
	
	/**
	 * 同电话查询
	 * 
	 * @param account
	 * @param userId
	 *            为null时仅根据用户名判断。不为null会检测是否存在除此ID外其他同名(修改时检测)
	 * @param userType
	 *            为2时仅根据客户用户名判断。
	 * @return
	 */
	int selectSameByUserPhone(@Param("phone") String phone, @Param("userId") Integer userId,
			@Param("userType") Integer userType);
	
	/**
	 * 同邮箱查询
	 * 
	 * @param account
	 * @param userId
	 *            为null时仅根据用户名判断。不为null会检测是否存在除此ID外其他同名(修改时检测)
	 * @param userType
	 *            为2时仅根据客户用户名判断。
	 * @return
	 */
	int selectSameByUserMailbox(@Param("mailbox") String mailbox, @Param("userId") Integer userId,
			@Param("userType") Integer userType);

	/**
	 * 根据参数查询    只查询APP用户和web用户
	 * 
	 * @param map
	 *            包括查询参数和分页参数
	 * @return
	 */
	List<User> selectByParams(Map<String, Object> map);
	
	/**
	 * 根据参数查询    只查询超级管理员和普通管理用户
	 * @param map
	 * @return
	 */
	List<User> queryParams(Map<String,Object> map);
	
	/**
	 * 根据组织删除所有组织下的用户
	 */
	int delGroupUser(Integer groupId);
	
	/**
	 * 根据ID查询
	 * 
	 * @param userId
	 * @return
	 */
	User selectByPrimaryKey(@Param("userId") Integer userId);
	
	/*
	 * 根据用户id修改用户名称与密码
	 * 
	 * */	
	int updateUserNameAndKey(User user);
	
	/**
     * 修改更新帐号信息
     * 
     * @param user
     * @return
     */
	 int updateByPrimaryKey(User user);
	 
	 /**
	  * 根据方案id获取用户名称和组织名称
	  */
	 List<User> selectidName(String ropeProgramme);
	/**
	  * 通过用户名查询用户组织
	  */
	 User queryGroupByUserName(String userAccount);
	 /**
	  * 通过用户名查询用户信息id
	  * @param userAccount
	  * @return
	  */
	 User selectName(String userAccount);
	 /**
	  * 根据组织id查询集合
	  * @param groupId
	  * @return
	  */
	 List<User> selectId(@Param("groupId") Integer groupId);
	 
	 int selectByGroupId(@Param("groupId")Integer groupId);
	 /**
	  * 根据用户名查询组织头像
	  * @param account
	  * @return
	  */
	 User selectGroupImage(int groupId);
	 
	 User selectByAccount(@Param("userAccount")String userAccount);
	 
	 User querybyuserid(@Param("userId")Integer userId);
}